package pl.koziolekweb.szkola.NKBeans;

// NK-Beans/Kibice.java
 
import java.beans.*;
import java.io.*;

  // model (dane obserwowane)
public class Kibice implements Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	int[] kibice;
    String[] opis;
    
    // obsluga zmian wetowalnych
    private VetoableChangeSupport veto = 
        new VetoableChangeSupport(this);
    
    public synchronized void addVetoableChangeListener(
            VetoableChangeListener lis) {
        veto.addVetoableChangeListener(lis);
    }
    public synchronized void removeVetoableChangeListener(
            VetoableChangeListener lis) {
        veto.removeVetoableChangeListener(lis);
    }
    
    // obsluga zmian (niewetowalnych)
    private PropertyChangeSupport prop = 
        new PropertyChangeSupport(this);
    
    public synchronized void addPropertyChangeListener(
            PropertyChangeListener lis) {
        prop.addPropertyChangeListener(lis);
    }
    public synchronized void removePropertyChangeListener(
            PropertyChangeListener lis) {
        prop.removePropertyChangeListener(lis);
    }

    public Kibice() {
        kibice = new int[]{0,0};
        opis   = new String[]{"Legia","Polonia"};
    }
    
    synchronized void setKibice(int[] k) {
        kibice = k;
    }
    synchronized int[] getKibice() {
        return new int[] {kibice[0],kibice[1]};
    }
    
      // usilujemy zmienic model
    public synchronized void addKibic(String s)
            throws PropertyVetoException {
        int index = 0;
        if      (s.equalsIgnoreCase("Legia"))   index = 0;
        else if (s.equalsIgnoreCase("Polonia")) index = 1;
        int[] oldKibice = getKibice();
        int[] newKibice = getKibice();
        newKibice[index]++;
        veto.fireVetoableChange("kibice",oldKibice,newKibice);
        
          // jesli nie bylo wyjatku znajdziemy sie tutaj;
          // zatwierdzamy zmiane i powiadamiamy widoki.
          // Jesli weto bylo, to wyjatek wychodzi do funkcji
          // wywolujacej i ten fragment sie nie wykona
        kibice = newKibice;
        prop.firePropertyChange("kibice",oldKibice,newKibice);
    }
}
